package co.edu.uniquindio.logica;

import static javax.persistence.TemporalType.DATE;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;

/**
 * Entity implementation class for Entity: Pais
 * 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
@Entity
@Table(name = "Pais")
public class Pais implements Serializable {

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * este atributo representa el nombre del pais y es la llave primaria de la
	 * clase
	 */
	@Id
	private String nombre;
	/**
	 * este atributo representa el numero de codigo postal del pais
	 */
	private String codigoPostal;
	/**
	 * este atributo representa la zona horaria del pais
	 */
	@Temporal(DATE)
	private Date zonaHoraria;
	/**
	 * esta relacion representa a que en un pais ahi muchas personas
	 */
	@OneToMany(mappedBy = "pais")
	private List<Persona> personas;

	/**
	 * metodo constructor para instancias la entidad con estos parametros
	 * 
	 * @param codigoPostal
	 * @param zonaHoraria
	 * @param nombre
	 */
	public Pais(String codigoPostal, Date zonaHoraria, String nombre) {
		this.codigoPostal = codigoPostal;
		this.zonaHoraria = zonaHoraria;
		this.nombre = nombre;
	}

	/**
	 * metodo constructor obligatorio
	 */
	public Pais() {
		super();
	}

	/**
	 * metodo para obtener el codigo postal del pais
	 * @return el codigo postal del pais
	 */
	public String getCodigoPostal() {
		return this.codigoPostal;
	}

	/**
	 * metodo que permite modificar el codigo postal
	 * @param codigoPostal
	 */
	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}
	/**
	 * metodo que permite obtener la zona horaria del pais
	 * @return zona horaria
	 */
	public Date getZonaHoraria() {
		return this.zonaHoraria;
	}
	/**
	 * metodo que permite especificar la zona horaria
	 * @param zonaHoraria
	 */
	public void setZonaHoraria(Date zonaHoraria) {
		this.zonaHoraria = zonaHoraria;
	}

	/**
	 * este metodo permite obtener la lista de personas de este pais
	 * @return una lista con las personas de esta nacionalidad
	 */
	public List<Persona> getPersonas() {
		return personas;
	}

	/**
	 * metodo para especificar la lista de personas de esta nacionalidad
	 * @param lista de personas
	 */
	public void setPersonas(List<Persona> personas) {
		this.personas = personas;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((zonaHoraria == null) ? 0 : zonaHoraria.hashCode());
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Pais other = (Pais) obj;
		if (zonaHoraria == null) {
			if (other.zonaHoraria != null)
				return false;
		} else if (!zonaHoraria.equals(other.zonaHoraria))
			return false;
		return true;
	}

	/**
	 * metodo para obtener el nombre del pais
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * metodo para especificar el nombre del pais
	 * @param nombre
	 *            the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return  nombre ;
	}

}
